package com.briup.smartcity_group7.service.impl;

import com.briup.smartcity_group7.bean.basic.Carousel;
import com.briup.smartcity_group7.dao.basic.CarouselMapper;
import com.briup.smartcity_group7.dao.ext.CarouselExtMapper;
import com.briup.smartcity_group7.exception.ServiceException;
import com.briup.smartcity_group7.service.ICarouselService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

import static com.briup.smartcity_group7.status.status_role.status;

/**
 * @Author: lenovo
 * @Date: 2022/12/31/15:48
 */
@Slf4j
@Service
public class CarouselServiceImpl implements ICarouselService {
    @Autowired
    private CarouselMapper mapper;
    @Autowired
    private CarouselExtMapper extMapper;

    //分页查询所有轮播图
    public PageInfo<Carousel> findAll(int pageNum, int pageSize) {
        //Java8写法
        PageInfo<Carousel> pageInfo = PageHelper.startPage(pageNum, pageSize, true)
                .doSelectPageInfo(() -> extMapper.selectAll());
        return pageInfo;
    }

    //删除轮播图操作
    public void deleteById(int id) throws ServiceException {
        //补充√：逻辑判断当前删除的轮播图是否存在？--不存在--》提示用户，数据已被删除（其他管理员）
        Carousel carousel = extMapper.selectById(id);
        if(carousel==null){
            throw new ServiceException("删除失败，该轮播图不存在");
        }
        mapper.deleteByPrimaryKey(id);
    }

    //新增轮播图后保存操作
    public void saveCarousel(Carousel carousel) {
        log.info((carousel.toString()));
        //1、id自增，默认null；
        //2、设置status状态--》补充√：使用静态常量表示0对应的业务信息
        carousel.setCarouselStatus(status);
        //补充⚪：考虑数据的唯一性（url，名字name）
        Carousel name = extMapper.selectByName(carousel.getCarouselName());
        if(name!=null){ //已存在
            throw new ServiceException("新增失败，该轮播图名称已被使用");
        }
        Carousel url = extMapper.selectByURL(carousel.getCarouselUrl());
        if(url!=null){
            throw new ServiceException("新增失败，该轮播图已存在");
        }
        mapper.insert(carousel);
    }

    //修改轮播图信息--根据id修改其他信息
    public void updateCarousel(Carousel carousel) {
        //补充√：更新数据时，先判断数据是否存在（有可能被其他管理员抢先删除了）
        Carousel id = mapper.selectByPrimaryKey(carousel);
        if(id==null){
            throw new ServiceException("修改失败，该轮播图不存在");
        }
        mapper.updateByPrimaryKeySelective(carousel);
    }

    //查询所有开启的轮播图
    public List<Carousel> findYesCarousel() {
        return extMapper.selectByYes();
    }
}
